package com.pc_project.service.impl;

import com.github.pagehelper.page.PageMethod;
import com.pc_project.domain.Letter;
import com.pc_project.domain.LetterType;
import com.pc_project.mapper.LetterDao;
import com.pc_project.mapper.LettertypeDao;
import com.pc_project.service.LetterService;
import java.util.List;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.Date;

/**
 * @author iceberg-work
 */
@Service("LetterService")
public class LetterServiceImpl implements LetterService {
    @Resource
    private LetterDao letterDao;
    @Resource
    private LettertypeDao lettertypeDao;

    /**
     *发送信件
     *
     * @param suId 发信者id
     * @param ltId 信件内容id
     * @param lInfo 信件内容
     * @return 是否成功（<code>boolean</code>）
     */
    @Override
    public boolean sendLetter(Integer suId, Integer ltId, String lInfo) {
        Letter record = new Letter();
        record.setSuId(suId);
        record.setLtId(ltId);
        record.setlInfo(lInfo);
        //获得当前时间
        Date date = new Date();
        //将时间转换成Timestamp类型，这样便可以存入到Mysql数据库中
        Timestamp t = new Timestamp(date.getTime());
        record.setSendTime(t);
        int assertion = letterDao.insert(record);
        return assertion == 1;
    }

    /**
     * 咨询者修改信件内容
     *
     * @param suId 发信者id
     * @param lId 信件id
     * @param lInfo 信件内容
     * @return 是否成功（<code>boolean</code>）
     */
    @Override
    public boolean updateLetter(Integer suId, Integer lId, String lInfo) {
        Letter record = new Letter();
        record.setSuId(suId);
        record.setlId(lId);
        record.setlInfo(lInfo);
        int assertion = letterDao.updateByPrimaryKeyAndSuId(record);
        return assertion == 1;
    }

    /**
     * 撤回信件
     *
     * @param suId 发信者id
     * @param lId 信件id
     * @return 是否成功（<code>boolean</code>）
     */
    @Override
    public boolean delete(Integer suId, Integer lId) {
        int assertion = letterDao.deleteByPrimaryKeyAndSuId(suId, lId);
        return assertion == 1;
    }

    /**
     *查询信件类别
     *
     * @param letter 信件
     * @return 信件类别（<code>LetterType</code>）
     */
    @Override
    public LetterType queryLetterType(Letter letter) {
        int suId = letter.getSuId();
        int ltId = letter.getLtId();
        int lId = letter.getlId();
        if(lId != 0) {
            return lettertypeDao.selectByLIdAndSuId(suId, lId);
        } else if(ltId != 0) {
            return lettertypeDao.selectByPrimaryKeyAndSuId(suId, ltId);
        }
        return null;
    }

    /**
     * 信件池查询信件
     *
     * @param suId 发信者id
     * @param page com.pc_project.domain.VO.Page对象
     * @param ltId 根据类别查询
     * @return 信件池（<code>Object</code>）
     */
    @Override
    public Object queryAll(Integer suId, com.pc_project.domain.VO.Page page, Integer ltId) {
        List<Letter> list;
        // 开始分页
        PageMethod.startPage(page.getPageNumber(),page.getPageSize());
        if(ltId != null) {
            list = letterDao.selectAllByItIdAndSuId(suId, ltId);
        } else {
            list = letterDao.selectAllBySuId(suId);
        }
        com.github.pagehelper.Page listWithPage = (com.github.pagehelper.Page) list;
        return listWithPage;
    }

    /**
     *查询该用户信件
     *
     * @param suId 发信者id
     * @param ltId 根据信件类型id
     * @param page com.pc_project.domain.VO.Page对象
     * @return 用户信件（<code>Object</code>）
     */
    @Override
    public Object queryLetter(Integer suId, Integer ltId, com.pc_project.domain.VO.Page page) {
        // 开始分页
        PageMethod.startPage(page.getPageNumber(),page.getPageSize());
        List<Letter> list = letterDao.selectLettersByLtIdAndSuId(suId, ltId);
        com.github.pagehelper.Page listWithPage = (com.github.pagehelper.Page) list;
        return listWithPage;
    }
}